package com.qixiao.lib.generic.restrict;

/**
 * 泛型的约束
 */
public class Restrict<T> {

    private T data;

    //不能是实例化类型变量
    public Restrict() {
//        this.data = new T();
    }

    //静态域或静态方法里不能引用类型变量
//    private static T instance;
//    private static T init() {}
    //静态方法是泛型方法可以，但方法中T,是在方法中申明的 和 类中的T毫无关系
    private static <T> T test(T t){
        return t;
    }

    public static void main(String[] args) {
        //泛型不能使用基本数据类型
        //Restrict<int> restrict;
        Restrict<Double> restrict = new Restrict<>();
        //泛型不能使用instanof
        //if(restrict instanceof Restrict<Double>)
//        if(restrict instanceof Restrict<T>)

        Restrict<String> restrict1 = new Restrict<>();
        //返回true
        System.out.println(restrict.getClass() == restrict1.getClass());
        //不管是什么类型，都是拿到一样的原生类型
        System.out.println(restrict.getClass());
        System.out.println(restrict1.getClass());

        //可以定义泛型数组
        Restrict<Double> restrict2;
        //但是不能创建泛型数组
//        Restrict<Double>[] restrict3 = new Restrict<Double>[];

    }

}
